package futbol5

import java.util.Set
import java.util.HashSet
import observers.AbstractObserver
import java.util.List
import exceptions.NoJuegaException
import exceptions.YaJuegaException

class Partido {
	@Property Set <Jugador> jugadores
	@Property List<AbstractObserver> observers
	
	new(){
		jugadores = new HashSet
		
	}
	
	def void agregarJugador(Jugador unJugador){
		if (jugadores.contains(unJugador)){ //decidir si borrarlo o dejarlo
			throw new YaJuegaException("El Jugador ya fue ingresado")
		}
		if (unJugador.juegoEn(this)){
			//observers.forEach [obs | obs.avisaQueJuego(jugadores)]
			jugadores.add(unJugador)
			
			this.rechequearPartido
			//
			}	
	}
	
	def void quitarJugador(Jugador unJugador){
		jugadores.remove(unJugador)
	}
	
	def void rechequearPartido() {
		if(jugadores.size<10){
			if(this.evaluarJugador){
			throw new NoJuegaException("Algun jugador ya no quiere jugar")	
		}
		}else{
			this.estanTodos()
		}
	}
	
	def void cambiarJugadorPor(Jugador unJugador, Jugador otroJugador){
		this.quitarJugador(unJugador)
		this.agregarJugador(otroJugador)
	}
	
	def void estanTodos(){
		if(evaluarJugador){
			observers.forEach [obs | obs.seBajoAlguno()]
		}else{
			observers.forEach [obs | obs.llegueADiez()]
		}
	}
	
	def boolean evaluarJugador(){
		jugadores.exists( jugador | jugador.juegoEn(this) == false)
	}
}